<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>访问器属性</title>
</head>
<body>
  <!-- 访问器属性是对象的一种特殊属性，他不直接在对象中设置，而必须通过definePrototype()方法单独定义。 -->
    <!-- Object.defineProperty(obj, prop, descriptor)
    obj 要在其上定义属性的对象
    prop 要定义或修改的属性的名称 -->
  <script>
    var obj = {} // 为obj定义一个名为hello的访问器属性
    Object.defineProperty(obj,'hello', {
      get: function () {
        console.log('get方法被调用了')
      },
      set: function (val) {
        console.log('set方法被调用了，参数是'+val)
      }
    })
    obj.hello;  // 读取属性，就是调用get函数并返回get函数的返回值
    obj.hello ='abc'  // 为属性赋值，就是调用set函数，赋值其实是传参 
    // get 和 set 方法内部的 this 都指向 obj，这意味着 get 和 set 函数可以操作对象内部的值。另外，访问器属性的会"覆盖"同名的普通属性，因为访问器属性会被优先访问，与其同名的普通属性则会被忽略。
  </script>
</body>
</html>